package com.t235.gc.auth.service;

import com.t235.gc.LayuiTreeNode;
import com.t235.gc.entity.SysMenu;
import org.springframework.cache.annotation.Cacheable;

import java.util.List;

/**
 * 菜单表(SysMenu)表服务接口
 *
 * @author makejava
 * @since 2021-03-24 08:45:40
 */
public interface SysMenuService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    SysMenu queryById(String id);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<SysMenu> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param sysMenu 实例对象
     * @return 实例对象
     */
    SysMenu insert(SysMenu sysMenu);

    /**
     * 修改数据
     *
     * @param sysMenu 实例对象
     * @return 实例对象
     */
    SysMenu update(SysMenu sysMenu);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(String id);

    List<SysMenu> queryAllByRoleNames(String roleNames);

    List<SysMenu> queryAllByRoleUserName(String username);

    @Cacheable(key = "#root.targetClass.simpleName + '::' + #root.methodName + '::' + #username")
    List<LayuiTreeNode> buildLayuiMenuTree(String username);
}
